数据治理 | 快速get数据采集技能:理论知识篇
我们将在数据治理板块中推出一系列原创推文,帮助读者搭建一个完整的社科研究数据治理软硬件体系。该板块将涉及以下几个模块:
计算机基础知识
编程基础 (1)数据治理 | 带你学Python之 环境搭建与基础数据类型介绍篇
(4)数据治理 | 还在用Excel做数据分析呢?SQL它不香吗
(5)数据治理 | 普通社科人如何学习SQL?一篇文章给您说明白
数据采集 (1)本期内容:数据治理 | 快速get数据采集技能:理论知识篇
数据存储 (1)安装篇 数据治理 | 遇到海量数据stata卡死怎么办?这一数据处理利器要掌握
(2)管理篇 数据治理 | 多人协同处理数据担心不安全?学会这一招,轻松管理你的数据团队
(3)数据导入 数据治理 | “把大象装进冰箱的第二步”:海量微观数据如何“塞进”数据库?
数据清洗 数据实验室搭建
Part1引言
社科研究,首先要有数据。大数据时代为社科研究提供了广泛的数据来源,而数据采集技术可以让互联网上分散的数据汇聚起来实现自身的研究目标,因此大数据时代的社科研究者非常有必要了解并掌握数据采集相关基础知识。
Part2数据采集基本概念
1网络爬虫
大数据时代采集数据离不开爬虫,比如在进行大数据分析或数据挖掘时,信息的采集是一项重要的工作,如果单纯靠人力进行信息采集,在面对数据量庞大的情况时,是不可取的,这时可以使用网络爬虫。
网络爬虫又称网络蜘蛛,可以自动化浏览网络网页中的信息,并且能够很方便地把这些信息保存下来。
我们平常使用的搜索引擎就是基于网络爬虫实现的,以百度为例,百度蜘蛛每天会在海量的互联网信息中进行爬取,爬取优质信息并收录,当用户在百度搜索引擎上检索对应关键词时,百度将对关键词进行分析处理,从收录的网页中找出相关网页,按照一定的排名规则进行排序并将结果展现给用户。
2数据采集基本流程
数据采集的基本流程如下图所示:
第一步:访问页面,获取原始数据
获取网页就是给一个网址发送请求,该网址会返回整个网页的数据。类似于我们在浏览器中输入一个网址并按回车键,然后你可以看到浏览器返回了我们想要的内容。
第二步:解析网页,提取需要的数据
解析网页就是从整个网页的数据中提取想要的数据。类似于你在页面中,只想要获取商品的价格,价格就是我们需要提取的数据。
第三步:存储数据
存储数据也很容易理解,就是把数据存储下来。我们可以存储在电脑本地,如Excel、Word文档等,也可以存储在数据库中。
Part3数据采集的法律问题
数据采集可能会有以下常见的法律问题:
1. 数据的使用。公开的数据并不一定被允许用于第三方盈利目的。例如某网站可以供所有人访问,但是如果一个读者把这个网站的数据爬取下来,然后用于盈利,那么可能会面临法律风险。
2. 骚扰问题。新手在开发数据采集程序时,往往不限制请求频率,这种做法一方面很容易导致程序被网站检测出来而做屏蔽,另一方面也会给网站造成一定的负担甚至网站瘫痪。
3. 隐私的泄露。触及到个人隐私的,例如公民姓名、电话号码,住址,身份证、账号密码等数据用于非法途径的,则会构成非法获取公民个人信息的违法行为,甚至保存爬取的隐私信息,也都是违法的。
Part4数据采集必备知识
数据采集涉及到计算机网络和编程(python编程基础见前期推文)相关知识,本文对数据采集需要的计算机网络知识做如下总结。
1URL
Internet上的每一个网页都具有一个唯一的名称标识,通常称之为URL(Uniform Resource Locator, 统一资源定位器)。它是www的统一资源定位标志,简单地说URL就是web地址,俗称“网址”。
举例来说,https://github.com/favicon.ico 是 GitHub 的网站图标链接,它就是URL,其中包括了访问的协议类型https
、访问的主机地址github.com
、访问的资源路径favicon.ico
,通过这样一个链接,我们便可以在互联网上找到这个资源。
2HTTP 和 HTTPS
在访问一些网站的时候,URL 的开头会有 http 或 https,这就是访问资源需要的协议类型。例如我们访问百度的首页:https://www.baidu.com ,有时我们还会看到 ftp、sftp、smb 开头的 URL,它们都是协议类型。
网络协议指的是计算机网络中互相通信的对等实体之间交换信息时所必须遵守的规则的集合。可以理解成客户端和服务器之间商量好的,用来传输数据的规则。
在爬虫中,我们抓取的页面通常都是 http 或 https 协议,这里首先了解一下这两个协议的含义:
HTTP,超文本传输协议(Hyper Text Transfer Protocol),被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。
HTTPS,全称是 Hyper Text Transfer Protocol over SecureSocket Layer,是以安全为目标的 HTTP 通道,简单讲是 HTTP 的安全版,即 HTTP 下加入 SSL 层,简称为 HTTPS,即在HTTP请求之前,加入了SSL,对传输内容进行加密,使得传输更加安全。
3网页的请求过程
为什么我们在浏览器中输入一个URL,例如:www.baidu.com,回车之后便会在浏览器中观察到到百度的首页内容?
实际上,这个过程就是我们客户端(浏览器)向百度的服务器发送了一个请求,网站服务器接收到这个请求后,对你的请求内容进行处理和解析,然后返回对应的响应,接着传回给浏览器。响应里包含了页面的源代码等内容,浏览器再对返回的内容其进行解析,最后再将网页呈现出来。
4Session和cookie
例如我们今天在该网站上面登陆了我们的账号,过几天之后再次访问该网站,发现网站帮我们自动登陆了,这就是Session和Cookie的作用。
Session 和 Cookie主要用来验证是否是同一用户,例如网站面对不同的用户,会返回不同的信息,就像Vip资源一样,只有登录了,才能获取数据。
Session存在于服务器,在我们访问网站的时候,服务器会在其内部开辟一块Session的内存空间,设置一个SessionID
并且与响应一同返回,后续我们访问网页的时候,浏览器会自动的带上SessionID
,告诉服务器我们访问的身份,服务器根据不同的身份,给我们返回不同的内容。
Cookie存在于我们客户端,跟Session一样,在第一次请求网站的时候,网站会同响应一起返回一个Set-Cookie
字段,告诉浏览器在我们本地设置一个cookie,随后的请求浏览器会带上这个Cookie访问服务器。
5一张网页的组成
1. HTML
HTML的英文全称是 Hyper Text Markup Language,即超文本标记语言。文件后缀名为.html
的文件就是HTML文件,它包括一系列标签,通过这些标签可以将网络上的文档格式统一,HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字,图形、动画、声音、表格、链接等。
HTML算是浏览器的骨架,是网页组成最重要的资源,我们可以在百度页面的任意空白地方,右键选择查看网页源代码,即可查看百度的HTML源代码。
我们向服务器请求,服务器最开始只会返回一个HTML,我们客户端(浏览器)拿到了HTML后,再对HTML进行解析,来继续获取后续文件,然后再渲染网页,例如:
<script>
标签用来加载JavaScript脚本或文件<img>
标签用来加载图片<a>
标签用来定位网页的超链接
2. CSS
CSS,全称叫做 Cascading Style Sheets,即层叠样式表。后缀名为.css的文件就是CSS文件,“层叠” 是指当在 HTML 中引用了多个样式文件,并且样式发生冲突时,浏览器能依据层叠顺序处理。“样式” 指网页中文字大小、颜色、元素间距、排列等格式。
CSS 主要的作用是用来美化网页的,用于制定网页内容的排版,例如一张图片该在网页的哪一个地方显示,还可以设置网页背景颜色等。
3. JavaScript
JavaScript,简称 JS,是一种脚本语言,文件后缀名为.js就是JS文件。HTML 和 CSS 配合使用,提供给用户的只是一种静态信息,缺乏交互性。
我们在网页里可能会看到一些交互和动画效果,如下载进度条、提示框、轮播图等,这通常就是 JavaScript 的功劳。它的出现使得用户与信息之间不只是一种浏览与显示的关系,而是实现了一种实时、动态、交互的页面功能。
Part5数据采集实用工具
大家都知道,浏览器请求网页,就是向目标网站的服务器发起请求,我们则需要知道浏览器发送了哪些请求,请求的类型是什么,请求的内容是什么等等,这一些内容都可以在浏览器开发者工具中看到。
以Chrome 浏览器为例,在浏览器中打开百度,在网页的右击并选择 “检查” 项(或直接按 F12 键),就可以打开开发者模式,点击Network(网络)面板后,点击刷新(或按F5),就可以看到如下内容,该操作我们称之为抓包:
从Network面板中可以看到浏览器向目标服务器发送的所有请求:
第一列 Name:请求的名称。 第二列 Status:响应的状态码,这里显示为 200,代表响应是正常的。 第三列 Type:请求的文档类型。 第四列 Initiator:请求源,用来标记请求是由哪个对象或进程发起的。 第五列 Size:请求资源文件的大小。如果是从缓存中取得的资源,则该列会显示 from cache。 第六列 Time:发起请求到获取响应所用的总时间。 第七列 Waterfall:网络请求的可视化瀑布流。
在Network面板的Name栏中,我们可以看到不同的请求数据包:
Headers:可以查看HTTP请求和响应信息 Preview:显示响应的预览 Response:查看请求返回的响应源码 Initiator:请求源,用来标记请求是由哪个对象或进程发起的。 Timing:中显示资源在整个请求生命周期过程中各部分花费的时间。 Cookies:可以查看该请求cookie的信息
下面列举出了在Headers栏目中,我们爬虫常关注的内容:
常规栏: Request URL: https://www.baidu.com/ (请求的URL) Request Method: GET (请求的类型) Status Code: 200 OK (请求的状态码) 响应标头: Content-Type: XXXXXXXXXX (响应的数据类型即编码) Set-Cookie: XXXXXXXXXXX (服务器返回的cookie信息) 请求标头: Host: XXXXXXXXXX (主机地址) User-Agent: XXXXXXXXXX (用户代理) Referer: XXXXXXXXXX(网页跳转链接) Cookie: XXXXXXXXXXXXX (我们提交给服务器的Cookie)
Part6总结
本文我们介绍了数据采集的基本概念、必备基础知识和数据采集的实用工具。之后,我们会发布《静态网页数据采集》和《动态网页数据采集》实战推文,敬请期待!
星标⭐我们不迷路!想要文章及时到,文末“在看”少不了!
点击搜索你感兴趣的内容吧
往期推荐
数据Seminar
这里是大数据、分析技术与学术研究的三叉路口
文 | 《大数据时代社科研究数据治理实务手册》